﻿using System;
using Rendiciones.Logica.Enumeradores;
using Rendiciones.Logica.Modelos.Validaciones;
using System.ComponentModel.DataAnnotations;
using Tesla.Proveedores;
using System.Collections.Generic;

namespace Rendiciones.Logica.Modelos
{
    public class Usuario : Entidad<Usuario>
    {
        public int IdUsuario { get; set; }
        [Required(ErrorMessage = "Ingrese Nombre")]
        public string Nombre { get; set; }
        [Required(ErrorMessage = "Ingrese Apellido")]
        public string Apellido { get; set; }
        [Required(ErrorMessage = "Ingrese Email")]
        [RequiereMailValido(ErrorMessage = "El formato del Email esta incorrecto")]
        public string Email { get; set; }
        [Required(ErrorMessage = "Ingrese Rut")]
        public string Rut { get; set; }
        [Required(ErrorMessage = "Ingrese Login")]
        public string Username { get; set; }
        [DebeSeleccionarAreaUsuario(ErrorMessage = "Debe seleccionar area")]
        public EAreaUsuario AreaUsuario { get; set; }
        public bool Activo { get; set; }
        public int SaldoAsignado { get; set; }
        public int Saldo { get; set; }
        public bool ActualizarPassword { get; set; }
        [ValidarPasswordUsuario(ErrorMessage = "Las contraseñas no coinciden o se encuentran vacias")]
        public string Password { get; set; }
        [ValidarPasswordUsuario(ErrorMessage = "Las contraseñas no coinciden o se encuentran vacias")]
        public string Password2 { get; set; }

        public ETipoUsuario TipoUsuario { get; set; }
        public bool EsAdministrador { get; set; }
        public int IdRolSeleccionado { get; set; }
        public DateTime? FechaCreacion { get; set; }
        public DateTime? FechaModificacion { get; set; }
        public int? Revision { get; set; }
        public int SysUsuario { get; set; }

        public string StrActivo { get { return Activo ? "Sí" : "No"; } }
        public string NombreCompleto { get { return (string.IsNullOrEmpty(Nombre) ? "" : Nombre.Trim()) + " " + (string.IsNullOrEmpty(Apellido) ? "" : Apellido.Trim()); } }
        public string StrModificacion { get { return FechaModificacion.HasValue ? FechaModificacion.Value.ToString("dd-MM-yyyy hh:mm:ss") : "--"; } }

        public List<Rol> Roles { get; set; }

        public Usuario()
        {
            IdUsuario = 0;
            Username = "";
            Password = "";
            Password2 = "";
            Nombre = "";
            Apellido = "";
            Rut = "";
            AreaUsuario = EAreaUsuario.Ninguno;
            Activo = true;
            ActualizarPassword = false;
            SaldoAsignado = 0;
            Saldo = 0;
            Email = "";
            TipoUsuario = ETipoUsuario.Ninguno;
            EsAdministrador = false;
            Roles = new List<Rol>();
            IdRolSeleccionado = 0;
            Revision = 1;
        }
    }
}